
# Variables

INCLUDE_DIR = include/
GCC_FLAGS = -Wall -fno-stack-protector -I $(INCLUDE_DIR)
NASM_FLAGS = -f aout -I $(INCLUDE_DIR)
MODULES = kstart libasm schedulerasm kernel queue string keyboard video console stdlib stdio ctype shell scheduler command printf history shm

OBJECT_FILES = $(MODULES:%=obj/%.o)

# Entrada para la compilacion completa del kernel.

kernel: $(OBJECT_FILES)
	ld -T link.ld -o kernel.bin $(OBJECT_FILES)
	mcopy -o kernel.bin a:/boot


# Comandos para la generacion de archivos objeto de ASM

obj/kstart.o:	src/kstart.asm
	nasm $(NASM_FLAGS) src/kstart.asm -o $*.o

obj/libasm.o:	src/libasm.asm
	nasm $(NASM_FLAGS) src/libasm.asm -o $*.o

obj/schedulerasm.o:	src/schedulerasm.asm
	nasm $(NASM_FLAGS) src/schedulerasm.asm -o $*.o

# Generacion por defecto de archivos objeto de C

obj/%.o:	src/%.c
	gcc $(GCC_FLAGS) -c $< -o $@


# Eliminacion de cualquier archivo generado por este makefile

clear:
	rm -f obj/*
	rm -f test/test.o
	rm -f test/test

clean: $(OBJECT_FILES)
		ld -T link.ld -o kernel.bin $(OBJECT_FILES)
		mcopy -o kernel.bin a:/boot
	   rm -f obj/*
	   rm -f test/test.o
	   rm -f test/test


# Ejecutar Bochs

#bochs:
#	bochs -q
